Integrated Circuits are generally categorized by the functions they perform. Commonly, such devices can be categorized as either logic or memory devices; the logic devices performing logic functions and the memory devices principally devoted to storing values used in computing tasks.
Logic Devices are commonly subcategorized into fixed logic and programmable logic devices. Fixed Logic designs include microprocessors and similar devices which are not typically capable of being custom-configured by the end user. Programmable logic devices are a hybrid of logic and memory devices that allow the device user to program and store on the device an application-specific logic configuration. That is, by programming techniques a PLA may be customized to perform specific functions repeatedly.
In many cases, desired device functionality strongly influences the device circuitry design, the process used to manufacture the device, the packaging method used to contain the device, and the methods used to test the device for proper function after manufacture. An increase in complexity of any integrated circuit leads to an increase in complexity of testing the device to ensure proper operation.
In the case of a fixed logic microprocessor device, it may contain on the chip elements of memory, logic, and a variety of peripheral circuits for communication to external circuits. All of these circuits must be tested for proper functional operation and operating speed.
While fixed logic devices are complex to test, the test protocol for such devices is somewhat simplified by the fact that they are always used in a consistent logic mode. Because the user has no ability to alter these devices to be application specific, the testing of the fixed logic and fixed memory size devices can be simplified relative to a device that can be configured (programmed) to a wide range of custom applications and runs a wide range of end-user programmed logic.
PLAs are integrated circuits that include an ability to program the logical operation of the device by storing a user defined program in the device. In addition to their uses as stand-alone devices, PLAs can be embedded into even larger, more complex circuits creating higher-level devices for many uses. A drawback of this approach is that testing such devices can be quite complicated, and therefore relatively expensive.
PLAs must be tested not only for basic circuit operation, but also tested in a variety of programmed conditions that simulate all of the possible programmed logic states that an end user could configure. This means a typical (conventional) PLA test includes a repeating sequence of: programming a standard logic condition into the device, testing the device with this logic configuration, and comparing the actual output to an expected output table. This sequence may be repeated a large number of times to fully test a device. Therefore, PLA architectures that offer the most flexibility to a user extract a proportionally higher price when it is required to test that all of the possibilities work.
Since PLAs are made in many capacities, an added complication is a need to create test programs and comparison data for each device capacity. Further, if PLAs are to be embedded within other, more complex circuits, such as System on a Chip (SoC) devices, it would be inconvenient and difficult to provide complete and isolated tester access to an embedded PLA in a more complex circuit. It is an object of the present invention to enable and facilitate SoC architectures having embedded PLAs, by providing significantly improved access to and testing of the PLA functionality in the larger integrated circuit. This access and testability is significantly enhanced by inclusion of a Built-In Self-Test (BIST) system according to embodiments of the present invention taught herein.
Given the above background, what is clearly needed is a simplified way to test both stand-alone and embedded PLAs more quickly and with less effort than has been provided in the prior art, and to therefore enable and enhance the placement of PLAs in larger integrated circuits, such as SoCs.